﻿//jQuery版
$.fn.enable_changed_form_confirm = function() {
    var _f = this;
    
    $(':text, :password, textarea', this).each(function() {
        $(this).attr('_value', $(this).val());
    });

    $(':checkbox, :radio', this).each(function() {
        var _v = this.checked ? 'on' : 'off';
        $(this).attr('_value', _v);
    });

    $('select', this).each(function() {
        var selectIndex = this.selectedIndex;
        var selectValue = selectIndex > -1 ? this.options[selectIndex].value : "";
        $(this).attr('_value', selectValue);
    });

    $(this).submit(function() {
        window.onbeforeunload = null;
    });

    window.onbeforeunload = function() {
        if (is_form_changed(_f)) {
            return "你正在编辑并没有保存，点击“确定”将丢失您所编辑的内容！";
        }
    }
}



//$(function() {
//    $('form').enable_changed_form_confirm();
//});

//$(document).ready(function() {
//    $('form').each(function(i, o) {
//        $(o).bind('submit', function() { return autoCheckForm(); });
//    });
//});


function autoCheckForm() {
    $.formValidator.initConfig({ onerror: function(mes) {
        var arr = mes.split('+++');
        if (!$('#' + arr[1]).attr('onfocus')) {
            alert(arr[0]);
        }
        document.getElementById(arr[1]).focus();
    }
    });
    var needCheckNum = 0;
    $('*[VailTag]').each(function(i, o) {
        eval('var valid=' + strToJson($(o).attr('VailTag')));
        if (valid.NotNull) {
            $(o).formValidator().inputValidator({ min: 1, onerror: getCaptionName($(o).attr('id')) + "不能为空!+++" + $(o).attr('id') });
        }
        if (valid.Max) {
            $(o).formValidator().inputValidator({ max: valid.Max, onerror: getCaptionName($(o).attr('id')) + "不能大于" + valid.Max + "个字符!+++" + $(o).attr('id') });
        }
        if (valid.Min) {
            $(o).formValidator().inputValidator({ min: valid.Min, onerror: getCaptionName($(o).attr('id')) + "不能小于" + valid.Min + "个字符!+++" + $(o).attr('id') });
        }
        if (valid.Number) {
            $(o).formValidator().inputValidator().regexValidator({ regexp: "^([+-]?)\\d*\\.?\\d+$", onerror: getCaptionName($(o).attr('id')) + "为数字!+++" + $(o).attr('id') });
        }
        needCheckNum++;
    });
    if (needCheckNum == 0) 
        return true;
    return jQuery.formValidator.pageIsValid();
}

function getCaptionName(sm) {
    return $('#psc'+sm.substring(2)).html();
}

////JS版本
////保存form里的所有原始属性
//var alSavedElements = new Array();
////是否判断form的属性改变，true判断，false不判断
//var bCheckForm = true;

///**
// * 页面加载时候的操作，所有页面加载时的操作可以在这里进行扩展
// * @param form 所要保存属性的form
// */
//function saveElementsOnLoad(form) {
//    saveFormElements(form);
//}

///**
// * 离开页面时的操作，所有离开页面前的操作可在这里进行扩展
// * @param form 所要保存属性的form
// * @param elements 所保存的属性的数组
// * @return 离开页面的提示信息
// */
//function checkFormOnUnload(form) {
//    var bFormStatus = isFormChanged(form);
//    if(bCheckForm && bFormStatus) {
//        return "该页面已经被修改，离开后所有修改全部丢失！"; 
//    }
//    return;
//}

///**
// * 保存form的所有属性
// * @param form 所要保存的属性的form
// */
//function saveFormElements(form) {
//    for(var i = 0 ; i < form.elements.length ; i++ ) {
//        if("select-one" == form.elements[i].type) {
//            alSavedElements.push(form.elements[i].selectedIndex);
//            continue;
//        }
//        if("radio" == form.elements[i].type || "checkbox" == form.elements[i].type) {
//            alSavedElements.push(form.elements[i].checked);
//            continue;
//        }
//        alSavedElements.push(form.elements[i].value);
//    }
//}

///**
// * 检查form的属性是否改变
// * @param form 所比较的form
// * @param alSavedElements 所比较的原始属性数组
// * @return true form已变化 false form没变化
// */
//function isFormChanged(form) {
//    var bChanged = false;
//    if(form.elements.length!=alSavedElements.length) {
//        bChanged = true;
//        return bChanged;
//    }
//    for(var i = 0 ; i < form.elements.length ; i++ ) {
//        if("submit" != form.elements[i].type && "button" != form.elements[i].type && "reset" != form.elements[i].type && "hidden" != form.elements[i].type && "radio" != form.elements[i].type && "checkbox" != form.elements[i].type && "select-one" != form.elements[i].type && form.elements[i].value!=alSavedElements[i]) {
//            bChanged = true;
//            break;
//        }
//        if("select-one" == form.elements[i].type && form.elements[i].selectedIndex!=alSavedElements[i]) {
//            bChanged = true;
//            break;
//        }
//        if(("radio" == form.elements[i].type || "checkbox" == form.elements[i].type ) && form.elements[i].checked != alSavedElements[i]) {
//            bChanged = true;
//            break;
//        }
//    }
//    return bChanged;
//}

///**
// * 忽略form改变检查
// * 说明：该函数调用后即使form改变也不做离开页面的提示
// */
//function ignoreFormCheck() {
//    bCheckForm = false;
//}

///**
// * 强制进行form改变检查
// * 说明：该函数调用后无论form是否改变都会提示form已改变，是否离开页面
// */
//function forceFormCheck() {
//    bCheckForm = true;
//}

///**
// * 返回form的当前状态
// * 说明：用户可以通过该状态决定程序的流程走向
// * @param form 所检查的form对象
// * @return ture form改变，true form没改变
// */
//function getFormStatus(form) {
//   return isFormChanged(form); 
//}

////下面为测试函数
//function mysubmit(){
//    ignoreFormCheck();
//    return true;
//}
